<?php
/**
 * Created by PhpStorm.
 * User: admin
 * Date: 2018/4/19
 * Time: 12:32
 */
namespace app\admin\controller;

use think\Controller;
use think\Db;
use think\Request;
use think\Session;

class Role extends AdminController
{
    public function index()
    {
        // 查看角色表
        $list = db('role')->select();

        return view('', [
            'title' => '角色列表',
            'list' => $list
        ]);
    }

    // 角色添加 页面加载
    public function add()
    {
        return view('', ['title' => '角色添加',]);
    }

    // 角色添加 处理
    public function doadd()
    {
        // 接收表单提交过来的数据
        $res = input('post.');

        // 查询数据库中是否已存在该角色名 name
        $data = db('role')->where('name', $res['name'])->find();

        // 判断数据库中是否存在该角色
        // 若 $data = null, 则执行添加；否则，添加失败
        if (empty($data)) {
            // 正则验证：
            // 角色名：输入2-15个字符(仅支持中文)
            $pregName = '/^[\x{4e00}-\x{9fa5}]{2,15}+$/u';
            if (!preg_match($pregName, $res['name'])) {
                $this->error('该角色名格式不正确o(╥﹏╥)o');
            }

            // 添加单条数据
            $list = db('role')->insert($res);
            $this->success('角色添加成功(*^▽^*)', 'admin/Role/index');
        } else {
            $this->error('该角色已存在，添加失败o(╥﹏╥)o');
        }
    }

    // 角色编辑 页面加载
    public function edit($id)
    {
        $data = db('role')->where('id', $id)->find();

        return view('', [
            'title' => '角色编辑',
            'data'=>$data,
            'id'=>$id
        ]);
    }

    // 角色编辑 处理
    public function doedit($id)
    {
        // 接收表单传过来的数据
        $res = input('post.');

        // 查询数据库中是否存在该活动名 name
        $data = db('role')->where('id', $id)->find();
//        dump($data);
//
//      // 姓名：输入2-20个字符(仅支持中文)
        $pregName = '/^[\x{4e00}-\x{9fa5}]{2,20}+$/u';
        if (!preg_match($pregName, $res['name'])) {
//            dump($res['name']);
            $this->error('角色名格式不正确o(╥﹏╥)o');
        }


        // 判断原角色名与编辑的角色名是否相等
        // 不相等时，查询数据库中是否存在该角色名（若$name 返回null, 则证明可以执行更新；否则，提示角色名已存在，再次跳转到编辑页面）
        if (!($res['name'] == $data['name'])) {
            // 查询数据库是否存在该活动名 name
            $name = db('role')->where('name', $res['name'])->find();
            // 如果 $name为空，则可以执行下一步的更新；否则角色名已存在，请重新输入角色名
            if (! empty($name)) {
                $this->success('角色名已存在，请重新输入');

            }
        }

        // 更新数据表中的数据
        $list = db('role')->where('id', $id)->update([
            'name'=>$res['name'],
            'describe'=>$res['describe']
        ]);

        // 判断是否更新成功
        if (! empty($list)) {
            $this->success('角色更新成功(*^▽^*)', 'admin/Role/index');
        } else {
            $this->error('您没有做任何更新操作', 'admin/Role/index');
        }

    }

    // 分配权限 页面加载
    public function savenode($id)
    {
        // 查询所有权限
        $data = db('node')->select();

        // 查询指定角色的权限
        $rolenode = [];
        $arr = db('role_node')
            ->field('nid')
            ->where('rid', $id)
            ->select();

        foreach ($arr as $key=>$v) {
            $rolenode[] = $v['nid'];
        }

        return view('', [
            'title'=> '分配权限',
            'data' => $data,
            'id' => $id,
            'rolenode' => $rolenode
        ]);
    }

    // 分配权限 处理
    public function dosavenode()
    {
        // 接收表单传过来的所有数据
        $res = input('post.');

        // 清空角色的权限
        $del = db('role_node')->where('rid', $res['rid'])->delete();

        // 如果权限为空，则不执行任何操作
        if (! empty($res['node'])) {
            // 角色权限 数组
            $rolenode = $res['node'];
            foreach ($rolenode as $v) {
                $arr['rid'] = $res['rid'];
                $arr['nid'] = $v;
                $data = db('role_node')->insert($arr);
            }
        }

        $this->success('权限分配成功(*^▽^*)', 'admin/Role/index');
    }

    // 删除角色
//    public function delete($id)
//    {
//        // 查询 role_node 表
//        $select = db('role_node')->where('rid', $id)->find();
//        // 删除 role_node 表中的 rid
//        $del = db('role_node')->where('rid', $id)->delete();
//        // 删除角色
//        $data = db('role')->where('id', $id)->delete();
//
//        // 判断是否删除成功
//        if ($data > 0) {
//            $this->success('角色删除成功(*^▽^*)', 'admin/Role/index');
//        } else {
//            $this->error('角色删除失败o(╥﹏╥)o');
//        }
//    }

    public function delete($id)
    {
        // 查询 role_node 表
        $select = db('role_node')->where('rid', $id)->find();
        // 删除 role_node 表中的 rid
        $del = db('role_node')->where('rid', $id)->delete();
        // 删除角色
        $data = db('role')->where('id', $id)->delete();

        // 将状态码返回给ajax
        if ($data) {
            $arr['status'] = 1;
            $arr['msg'] = '角色删除成功';
            return $arr;
        } else {
            $arr['status'] = 2;
            $arr['msg'] = '角色删除失败';
            return $arr;
        }
    }

    // 验证角色名唯一性 (添加时)
    public function addcheckname()
    {
        $res = input('post.');

        // 查询数据库中是否已存在该角色名 name
        $data = db('role')->where('name', $res['name'])->find();

        // 判断数据库是否返回数据
        if (empty($data)) {
            return true;
        } else {
            return false;
        }
    }
}